package com.zjsru.plan2023.oneday;

/**
 * @Author: CookLee
 * @Date: 2023/5/28
 *
 * 删除字符串两端相同字符后的最短长度
 *
 * 输入：s = "ca"
 * 输出：2
 * 解释：你没法删除任何一个字符，所以字符串长度仍然保持不变。
 *
 * 输入：s = "cabaabac"
 * 输出：0
 * 解释：最优操作序列为：
 * - 选择前缀 "c" 和后缀 "c" 并删除它们，得到 s = "abaaba" 。
 * - 选择前缀 "a" 和后缀 "a" 并删除它们，得到 s = "baab" 。
 * - 选择前缀 "b" 和后缀 "b" 并删除它们，得到 s = "aa" 。
 * - 选择前缀 "a" 和后缀 "a" 并删除它们，得到 s = "" 。
 *
 * 输入：s = "aabccabba"
 * 输出：3
 * 解释：最优操作序列为：
 * - 选择前缀 "aa" 和后缀 "a" 并删除它们，得到 s = "bccabb" 。
 * - 选择前缀 "b" 和后缀 "bb" 并删除它们，得到 s = "cca" 。
 *
 */
public class MinimumLength {
    
    /**
     * 双指针模拟
     *
     * @param s 年代
     * @return int
     */
    public int minimumLength(String s) {
        int n = s.length();
        int left = 0;
        int right = n - 1;
        while (left < right && s.charAt(left) == s.charAt(right)) {
            char moreChar = s.charAt(left);
            //先判断右节点是否超过左节点 避免出现数组越界的问题
            while (left <= right && moreChar == s.charAt(left)) {
                left++;
            }
            while (left <= right && moreChar == s.charAt(right)) {
                right--;
            }
        }
        return right - left + 1;
    }
    
    public static void main(String[] args) {
        MinimumLength minimumLength = new MinimumLength();
        String s = "bbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbccbcbcbccbbabbb";
        System.out.println(minimumLength.minimumLength(s));
    }
}
